# 访问控制
# package
package语句作为Java源文件除注释外的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包)
用处:
- 包帮助管理大型软件系统:将功能相近的类划分到同一个包中。比如:MVC的设计模式
- 包可以包含类和子包,划分项目层次,便于管理
- 解决类命名冲突的问题
- 控制访问权限
JDK中主要的包:
java.lang----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。java.io----包含能提供多种输入/输出功能的类。java.net----包含执行与网络相关的操作的类和接口。java.text----包含了一些java格式化相关的类java.sql----包含了java进行JDBC数据库编程的相关类/接口
生成与包名对应目录(目录中可以是绝对地址、相对地址、“.”可以表示当前目录),运行时要加上包名
javac -d [目录] Hello.java cd 目录 java cn.itcast.chapter01.Hello
# import
- 为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类或全部类(.*)。import语句告诉编译器到哪里去寻找类。import一般出现在package后,类定义之前
- 注意:
在源文件中使用import显式的导入指定包下的类或接口
声明在包的声明和类的声明之间。
如果需要导入多个类或接口,那么就并列显式多个import语句即可
如果在代码中使用不同包下的同名的类。那么就需要使用类的全类名的方式指明调用的是哪个类。
已经导入java.lang包下的类。那么如果需要使用其子包下的类的话,仍然需要导入
静态导入(static import):调用指定类或接口下的静态的属性或方法,之后可以直接使用而无需写类名
// 如下仅为示例 import static com.example.demo.Tools.add; public static void main(String[] args) { int add = add(1, 2); }
# 权限修饰符
| 访问范围 | private | default | protected | public |
|---|---|---|---|---|
| 同一类 | √ | √ | √ | √ |
| 同一包 | √ | √ | √ | |
| 不同包的子类 | √ | √ | ||
| 同一工程 | √ |
private(类访问级别):除了类本身和类内部的成员,外界无法直接访问该元素。private是类和调用者之间的屏障。任何试图访问私有成员的行为都会报编译时错误;default(包访问级别):类或类成员没有修饰符为默认访问级别,该权限下的资源可以被同一包(库组件)中其他类的成员访问。protected(子类访问级别):被修饰的类成员能被本包中其他类、不同包中该类子类访问public(公共访问级别):类或类成员能被所有都能访问
TIP
外部类即 class 的修饰符只能是 public 或 默认;
类的成员(属性、方法、构造器、内部类)的权限修饰符可以是以上四种
一个Java文件中可以有多个类,但是 public 修饰的只能有一个,且类名和文件名一致!
# jar
Java Archive File,Java档案文件,是一种压缩文件,独立于任何操作系统。操作步骤如下:
编译生成与包名对应目录的class文件
java -d . Hello.java利用jar命令将cn及其目录下的文件都压缩成jar包
jar -cvf Hello.jar cn由于目前jar包中没有主清单属性,修改jar包
META-INF中MANIFEST.MF文件,指定main方法所在类Main-Class: cn.itcast.chapter01.Hello //注意“:”后有空格运行jar包
java -jar Hello.jar解压jar包
jar -xvf Hello.jar
← Generic 范型 习题 →